package com.controller;

import com.bean.BookCategory;
import com.common.Result;
import com.service.BookCategoryService;
import com.utils.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/book-categories")
public class BookCategoryController {

    @Autowired
    private BookCategoryService bookCategoryService;

    /**
     * 根据分类 id 获取书籍分类信息
     * @param categoryId 分类 id
     * @return 封装了书籍分类信息的通用结果对象，包含状态码、消息和数据
     */
    @GetMapping("/{categoryId}")
    public Result<BookCategory> getBookCategoryById(@PathVariable Integer categoryId) {
        BookCategory category = bookCategoryService.getBookCategoryById(categoryId);
        if (category != null) {
            return Result.success(category);
        }
        return Result.fail("未找到该分类信息");
    }

    /**
     * 获取所有书籍分类信息
     * @return 封装了所有书籍分类信息列表的通用结果对象，包含状态码、消息和数据
     */
    @GetMapping
    public Result<List<BookCategory>> getAllBookCategories() {
        List<BookCategory> categories = bookCategoryService.getAllBookCategories();
        return Result.success(categories);
    }

    /**
     * 插入新的书籍分类信息
     * @param bookCategory 要插入的书籍分类信息对象
     * @return 封装了插入结果的通用结果对象，包含状态码、消息和插入是否成功的标志
     */
    @PostMapping
    public Result<Boolean> insertBookCategory(@RequestBody BookCategory bookCategory) {
        boolean result = bookCategoryService.insertBookCategory(bookCategory);
        if (result) {
            return Result.success(true);
        }
        return Result.fail("插入分类信息失败");
    }

    /**
     * 根据分类 ID 更新书籍分类信息
     * @param bookCategory 包含要更新信息的书籍分类对象，categoryId 用于定位要更新的记录
     * @return 封装了更新结果的通用结果对象，包含状态码、消息和更新是否成功的标志
     */
    @PutMapping
    public Result<Boolean> updateBookCategory(@RequestBody BookCategory bookCategory) {
        boolean result = bookCategoryService.updateBookCategory(bookCategory);
        if (result) {
            return Result.success(true);
        }
        return Result.fail("更新分类信息失败");
    }

    /**
     * 根据分类 ID 删除书籍分类信息
     * @param categoryId 要删除的分类 ID
     * @return 封装了删除结果的通用结果对象，包含状态码、消息和删除是否成功的标志
     */
    @DeleteMapping("/{categoryId}")
    public Result<Boolean> deleteBookCategoryById(@PathVariable Integer categoryId) {
        boolean result = bookCategoryService.deleteBookCategoryById(categoryId);
        if (result) {
            return Result.success(true);
        }
        return Result.fail("删除分类信息失败");
    }

    /**
     * 分页模糊查询书籍分类信息
     * @param keyword 模糊查询的关键字，可匹配分类名称
     * @param pageNum 当前页码
     * @param pageSize 每页显示的记录数
     * @return 封装了分页书籍分类信息的通用结果对象，包含状态码、消息和数据
     */
    @GetMapping("/search")
    public Result<PageInfo<BookCategory>> getBookCategoriesByKeyword(
            @RequestParam(required = false) String keyword,
            @RequestParam(defaultValue = "1") int pageNum,
            @RequestParam(defaultValue = "10") int pageSize) {
        PageInfo<BookCategory> pageInfo = bookCategoryService.getBookCategoriesByKeyword(keyword, pageNum, pageSize);
        return Result.success(pageInfo);
    }
}